5 from pathlib
import Path
6 from datetime
import datetime
18 goal : Post treatment of the result file obtained after an experiment
20 how to use : Call this script at the end of your PTVR experiment
24 Created on : Thu Oct 6 11:50:47 2022
29 root_folder = str(Path(__file__).parents[4])
30 root_folder = root_folder.replace(
'\\',
'/' )
31 my_path = root_folder +
"/PTVR_Operators/Results/mnread_vr_experiment/"
33 list_of_files = glob.glob(my_path +
"*Main*.csv")
35 result_file_name = max(list_of_files, key=os.path.getctime)
38 columns_to_keep = [
'callback_name',
'callback_timestamp',
'sentence_number',
39 'sentence_displayed',
'x_logmar',
'viewing_distance_in_m',
40 'misread_words',
'sentence_tag',
'tangent_screen_id',
41 'tangent_screen_width_in_m',
'tangent_screen_height_in_m']
43 final_columns = [
'sentence_number',
'sentence_tag',
'sentence_displayed',
44 'tangent_screen_id',
'tangent_screen_width_in_m',
'tangent_screen_height_in_m',
45 'x_logmar',
'viewing_distance_in_m',
'misread_words',
'errors_number',
'is_outside_area_radius',
'trial_ignored']
47 path_to_new_file = result_file_name+
"_cleaned.csv"
54 string = datetime.strptime(string,
"%Y-%m-%d-%H-%M-%S.%f")
58 if(isinstance(string, float)):
61 return len(str(string).split())
64 result_file = pandas.read_csv(result_file_name, sep=
";", usecols=columns_to_keep, encoding=
"utf_8")
65 result_file = result_file.loc[(result_file[
'callback_name']==
'EndCurrentScene') | (result_file[
'callback_name']==
'AddNewPoint') | (result_file[
'callback_name']==
'IgnoreTrial') | (result_file[
'callback_name']==
'OutsideAreaLimit')]
69 result_file[
'callback_timestamp'] = result_file[
'callback_timestamp'].apply(correct_date_format)
71 result_file[
'reading_time'] = result_file[
'callback_timestamp'].diff().dt.total_seconds()
73 result_file[
'is_outside_area_radius'] =
"No"
74 result_file[
'trial_ignored'] =
"No"
83 if 'IgnoreTrial' in result_file.values:
84 values = result_file[result_file[
'callback_name']==
'IgnoreTrial'][
'sentence_number'].tolist()
86 result_file.loc[result_file.sentence_number == value,
'trial_ignored'] =
"Yes"
90 if 'OutsideAreaLimit' in result_file.values:
91 numbers = result_file[result_file[
'callback_name']==
'OutsideAreaLimit'][
'sentence_number'].tolist()
92 for number
in numbers :
93 result_file.loc[result_file.sentence_number == number,
'is_outside_area_radius'] =
"Yes"
97 result_file[
'errors_number'] = result_file[
'misread_words'].apply(count_words)
102 temp_frame = pandas.DataFrame(result_file)
103 temp_frame = temp_frame.loc[(temp_frame[
'callback_name']==
'AddNewPoint')]
104 temp_frame = temp_frame[[
'reading_time',
'sentence_number']]
109 result_file = result_file.loc[(result_file[
'callback_name']==
'EndCurrentScene')]
110 result_file.drop(index=result_file.index[0], axis=0, inplace=
True)
111 result_file.drop(columns=[
"reading_time"], axis=1, inplace=
True)
115 result_file = result_file[final_columns]
116 final_frame = pandas.merge(result_file,temp_frame,on=[
"sentence_number"])
119 final_frame.to_csv(path_to_new_file, sep=
";", index =
False, header=
True)
120 print(
"New csv written")
130 if __name__ ==
"__main__":
def correct_date_format(string)